'use client'; import { Button, Input, Link, LoaderSpinner } from '@theme/components'; import { useForm, SubmitHandler } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import * as yup from 'yup'; import { usePasswordResetMutation, useGetValidatePasswordResetTokenQuery, PasswordResetType } from '@akinon/next/data/client/account'; import { useLocalization } from '@akinon/next/hooks'; import { useParams } from 'next/navigation'; import PasswordRulesFeedback from '@theme/components/password-rules-feedback'; export default function NewPassword() { const { id } = useParams<{ id: string[] }>(); const { t } = useLocalization(); const [newPassword, { isSuccess: formSuccess }] = usePasswordResetMutation(); const token = id?.join('/'); const { data: validationData, isLoading: isValidating, error: validationError } = useGetValidatePasswordResetTokenQuery(token, { skip: !token }); const newPasswordFormSchema = (t) => yup.object().shape({ password: yup .string() .required(t('forgot_password.create_new_password.form.error.required')) .matches( /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{6,}$/, t('forgot_password.create_new_password.form.error.password_rule') ) .max( 50, t('forgot_password.create_new_password.form.error.password_max') ), repeatPassword: yup .string() .required(t('forgot_password.create_new_password.form.error.required')) }); const { register, handleSubmit, watch, formState: { errors } } = useForm({ resolver: yupResolver(newPasswordFormSchema(t)) }); const passwordValue = watch('password', ''); const onSubmit: SubmitHandler = (data) => { data.slug = id?.join('/') ?? ''; newPassword(data); }; if (isValidating) { return (
); } if (validationError || !validationData?.validlink) { return (
{t('account.password_reset.expired_link_message')}
{t('account.password_reset.continue_password_reset')}
); } return (
{formSuccess ? (

{t('forgot_password.create_new_password.form.success.title')}

{t('forgot_password.create_new_password.form.success.button')}
) : (
{t('forgot_password.create_new_password.title')}
{t('forgot_password.create_new_password.description')}
)}
); }